﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Text;
using System.Web.UI.WebControls;
using SIMCObjetoNegocio;
using SIMCPresenter;
using SIMCIntegratedReports;

public partial class WebUserControls_WUCComposicionPortafolio : System.Web.UI.UserControl, IComposicionPortafolioPresenterView
{
    private ComposicionPortafolioPresenter m_Presenter;    
    private int PortafolioId;

    #region Propiedades
    public event EventHandler<EventArgs> Iniciar;

    public event EventHandler<EventArgs> BuscarPosiciones;

    private IList<PortafolioBalancePosicion> listaTemporal;

    public int PortafolioID
    {
        get
        {
            if (Request.QueryString["idportafolio"] != null)
            {
                return Convert.ToInt32(Request.QueryString["idportafolio"]);
            }
            return 0;
        }
       
    }

    public DateTime FechaPortafolio
    {
        get
        {
            lblFecha.Text = ((SessionVariable)Session["variable"]).FechaPortafolio.ToShortDateString();
            return ((SessionVariable)Session["variable"]).FechaPortafolio;
        }
    }

    public Dictionary<string, string> FiltroActivoPasivo
    {
        set
        {
            ddlActivoPasivo.Items.Clear();

            foreach (KeyValuePair<string, string> par in value)
            {
                ddlActivoPasivo.Items.Add(new ListItem { Text = par.Value, Value = par.Key });
            }
        }
    }

    public Dictionary<string, string> FiltroDivisa
    {
        set
        {
            ddlDivisa.Items.Clear();

            foreach (KeyValuePair<string, string> par in value)
            {
                ddlDivisa.Items.Add(new ListItem { Text = par.Value, Value = par.Key });
            }
        }
    }

    public Dictionary<string, string> FiltroTipoPosicion
    {
        set
        {
            ddlTipoPosicion.Items.Clear();

            foreach (KeyValuePair<string, string> par in value)
            {
                ddlTipoPosicion.Items.Add(new ListItem { Text = par.Value, Value = par.Key });
            }
        }
    }

    public string UsuarioExterno
    {
        get { return ((MembershipUsuario)Session["Usuario"]).UserName; }
    }

    public Portafolio DatosPortafolio
    {
        set
        {
            lblAlias.Text = value.Alias;
            lblTipo.Text = value.DescripcionTipoPortafolio;
        }
    }    

    public string ActivoPasivoSeleccionado
    {
        get { return ddlActivoPasivo.SelectedValue; }
    }

    public string DivisaSeleccionada
    {
        get { return ddlDivisa.SelectedValue; }
    }

    public string TipoPosicionSeleccionado
    {
        get { return ddlTipoPosicion.SelectedValue; }
    }

    public IList<PortafolioBalancePosicion> Activos
    {
        set
        {
            AgruparPorTipoPosicion(value, gvActivos, "GridView1", ActivoPasivo.Activo);
        }
    }

    public IList<PortafolioBalancePosicion> Pasivos
    {
        set
        {
            AgruparPorTipoPosicion(value, gvPasivos, "GridView2", ActivoPasivo.Pasivo);
        }
    } 
    #endregion

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        m_Presenter = new ComposicionPortafolioPresenter(this);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Iniciar != null)
            {
                Iniciar(null,null);

                int IdPortafolio = Convert.ToInt32(Request.QueryString["idportafolio"]);

                string Fecha = ((SessionVariable)Session["variable"]).FechaPortafolio.ToString("dd/MM/yyyy");

                ImageButton1.Attributes.Add("OnClick", CreateQueryString(IdPortafolio, Fecha).ToString());
            }           
        }
    }

    #region Eventos
    
    void grid_RowDataBound1(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink link = ((HyperLink)(e.Row.Cells[7].Controls[0]));
            link.NavigateUrl = "~/PrincipalExterno.aspx?idportafolio=" + listaTemporal[e.Row.RowIndex].IdPortafolio + "&idcuenta=" + listaTemporal[e.Row.RowIndex].Valor;
            link.Text = "Movs";
        }
    }

    protected void lbtnFiltrar_Click(object sender, EventArgs e)
    {
        BuscarPosiciones(null, null);
    }

    protected void LbtnVerGrid_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/PrincipalExterno.aspx?idPortafolio=" + PortafolioID + "&Tipo=Composicion");
    }    

    #endregion

    private void AgruparPorTipoPosicion(IList<PortafolioBalancePosicion> p_Posiciones, GridView p_Grid, string p_InnerGridName, ActivoPasivo p_AP)
    {
        IList<TipoPosicion> tipos = p_Posiciones.BuscarTipoGenericosDisponibles();
        Dictionary<string, IList<PortafolioBalancePosicion>> dictipos = new Dictionary<string, IList<PortafolioBalancePosicion>>();
        foreach (TipoPosicion tipo in tipos)
        {
            IList<PortafolioBalancePosicion> lista = p_Posiciones.FiltrarPorTipo(tipo);
            dictipos.Add(lista[0].TipoDetallado, lista);
        }

        p_Grid.DataSource = dictipos;
        p_Grid.DataBind();
        if (p_Grid.Rows.Count > 0)
        {
            p_Grid.FooterRow.Cells[0].Text = "Total";
            p_Grid.FooterRow.Cells[1].Text = (Convert.ToDouble(p_Posiciones.TotalValor())).ToString("n") + " (" + (Convert.ToDouble(p_Posiciones.TotalPorcentaje())).ToString("n") + "%)";

            foreach (GridViewRow row in p_Grid.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {

                    listaTemporal = p_Posiciones.FiltrarPorTipo(tipos[row.RowIndex]);

                    GridView grid = (GridView)row.FindControl(p_InnerGridName);

                    if (tipos[row.RowIndex] == TipoPosicion.EfectivoVista)
                    {
                        grid.RowDataBound += new GridViewRowEventHandler(grid_RowDataBound1);
                    }


                    grid.DataSource = listaTemporal;
                    grid.DataBind();

                    decimal? sumatoriaValores = p_Posiciones.TotalValorPorTipo(tipos[row.RowIndex], p_AP);
                    decimal? sumatoriaPorcentajeActivo = p_Posiciones.TotalPorcentajeActivoPorTipo(tipos[row.RowIndex], p_AP);

                    grid.FooterRow.Cells[0].Text = "Total";
                    grid.FooterRow.Cells[4].Text = (Convert.ToDouble(sumatoriaValores)).ToString("n");
                    grid.FooterRow.Cells[6].Text = (Convert.ToDouble(sumatoriaPorcentajeActivo)).ToString("n");
                }
            } 
        }
    }

    private StringBuilder CreateQueryString(int IdPortafolio, string Fecha)
    {
        StringBuilder strScript = new StringBuilder();
        strScript.Append("window.open('../pVisorIntegrado.aspx?PortafolioID=");
        strScript.Append(IdPortafolio + "&Fecha=" + Fecha + "&nombreReporte=" + TipoReporte.DetallePortafolioActivoOPasivo.ToString());
        strScript.Append("',null,'width=850,height=700,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=yes,menubar=no,copyhistory=no');");
        return strScript;
    }




    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {

    }
}